정적 메서드

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.01
조회수
9
버전
v1

정적 메서드

JavaScript는 객체 지향 프로그래밍(OOP)의 여러 기능을 지원하며, 중 하나로 **정적 메서드Static Methods)를 제공합니다. 정적서드는 클래스 자체에 속하며, 클래스의 인스턴스를 생성하지 않고도 호출할 수 있는 메서드입니다. 이 문서에서는 JavaScript에서 정적 메서드의 개념, 사용 방법, 주요 특징 및 실제 활용 사례를 다룹니다.

개요

정적 메서드는 클래스의 프로토타입이 아닌 클래스 생성자 함수에 직접 정의되는 메서드입니다. 즉, 인스턴스를 생성하지 않아도 클래스 이름을 통해 직접 접근할 수 있습니다. 이는 유틸리티 함수, 도우미 함수, 또는 클래스 전반에 걸쳐 공유되는 로직을 구현할 때 유용합니다.

정적 메서드는 static 키워드를 사용하여 정의합니다. ES6에서 도입된 클래스 문법을 통해 정적 메서드를 쉽게 작성할 수 있습니다.


정적 메서드의 정의와 문법

JavaScript에서 정적 메서드는 클래스 내부에서 static 키워드를 앞에 붙여 정의합니다.

class MathUtils {
  static add(a, b) {
    return a + b;
  }

  static multiply(a, b) {
    return a * b;
  }
}

위 예제에서 [add](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%A0%95%EC%A0%81%20%EB%A9%94%EC%84%9C%EB%93%9C/add)[multiply](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%A0%95%EC%A0%81%20%EB%A9%94%EC%84%9C%EB%93%9C/multiply)는 정적 메서드입니다. 이들을 호출할 때는 다음과 같이 인스턴스를 생성하지 않고 클래스 이름을 직접 사용합니다.

console.log(MathUtils.add(5, 3));       // 8
console.log(MathUtils.multiply(4, 6));  // 24

주의할 점

  • 정적 메서드는 인스턴스 메서드와 달리 new 키워드로 생성된 객체를 통해 호출할 수 없습니다.
  • 정적 메서드 내부에서 this는 클래스 생성자 함수를 가리키며, 인스턴스의 프로퍼티에 접근할 수 없습니다.

const utils = new MathUtils();
// utils.add(1, 2); // 오류: utils.add is not a function


정적 메서드의 특징

1. 인스턴스 생성 없이 호출 가능

정적 메서드는 객체를 생성하지 않고도 사용할 수 있어, 메모리 낭비를 줄이고 간편한 호출이 가능합니다.

2. 상속 가능

정적 메서드는 자식 클래스에 의해 상속됩니다. 즉, 부모 클래스의 정적 메서드는 자식 클래스에서도 직접 호출할 수 있습니다.

class Animal {
  static breathe() {
    return "모든 동물은 숨을 쉰다.";
  }
}

class Dog extends Animal {}

console.log(Dog.breathe()); // "모든 동물은 숨을 쉰다."

3. this의 의미

정적 메서드 내부에서 this는 현재 클래스를 가리킵니다. 이를 통해 같은 클래스 내의 다른 정적 메서드를 호출할 수 있습니다.

class Calculator {
  static square(x) {
    return x * x;
  }

  static cube(x) {
    return this.square(x) * x; // this는 Calculator 클래스를 가리킴
  }
}

console.log(Calculator.cube(3)); // 27


정적 메서드의 활용 사례

1. 유틸리티 클래스

정적 메서드는 반복적으로 사용되는 유틸리티 함수를 정리할 때 적합합니다.

class StringUtils {
  static isEmpty(str) {
    return str === null || str === undefined || str.trim() === '';
  }

  static capitalize(str) {
    return str.charAt(0).toUpperCase() + str.slice(1);
  }
}

console.log(StringUtils.isEmpty(""));           // true
console.log(StringUtils.capitalize("hello"));   // "Hello"

2. 객체 생성 팩토리 메서드

정적 메서드를 사용해 다양한 방식으로 인스턴스를 생성하는 팩토리 메서드를 구현할 수 있습니다.

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  static fromBirthYear(name, birthYear) {
    const currentYear = new Date().getFullYear();
    return new Person(name, currentYear - birthYear);
  }
}

const person = Person.fromBirthYear("홍길동", 1990);
console.log(person.age); // 34 (2024년 기준)

3. 싱글턴 패턴 구현

정적 메서드를 통해 싱글턴 패턴을 구현할 수 있습니다. 이는 클래스의 인스턴스가 단 하나만 존재하도록 보장합니다.

class Database {
  static instance = null;

  static getInstance() {
    if (!this.instance) {
      this.instance = new Database();
       return this.instance;
  }

  connect() {
    console.log("데이터베이스에 연결되었습니다.");
  }
}

const db1 = Database.getInstance();
const db2 = Database.getInstance();
console.log(db1 === db2); // true (같은 인스턴스)


정적 메서드와 인스턴스 메서드의 차이

항목 정적 메서드 인스턴스 메서드
호출 방식 ClassName.method() instance.method()
인스턴스 필요 여부 불필요 필요
this의 의미 클래스 생성자 함수 인스턴스 객체
상속 가능 (정적 메서드도 상속됨) 가능
주 용도 유틸리티, 팩토리, 공유 로직 객체 상태 조작

참고 자료 및 관련 문서


정적 메서드는 JavaScript에서 클래스 기반 프로그래밍을 보다 효율적으로 만들어주는 강력한 기능입니다. 올바르게 사용하면 코드의 재사용성과 유지보수성을 크게 향상시킬 수 있습니다. 특히 유틸리티 함수나 객체 생성 로직을 캡슐화할 때 매우 유용합니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?